﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta;
using Sinacor.Infra.UI.Common;

namespace Sinacor.UI.Bovespa.Alocacao.Communication.Translator.ModelToDataContract
{
    public class Negocio
    {
        public NegocioRequest ToNegocio(Sinacor.UI.Bovespa.Alocacao.Model.Negocio from)
        {
            NegocioRequest to = new NegocioRequest();
            to.Bolsa = from.Bolsa;
            to.Codigo = from.Codigo;
            //to.ContraParte = from.ContraParte;
            to.DataPregao = from.DataPregao;
            to.Digito = from.Digito;
            to.Liquidacao = from.Liquidacao;
            to.NaturezaOperacao = ToNaturezaOperacao(from.NaturezaOperacao).Value;
            to.Numero = from.Numero;
            to.Quantidade = from.Quantidade;
            to.QuantidadeCasada = from.QuantidadeCasada;
            to.Saldo = from.Saldo;
            to.Valor = from.Valor;
            
            
            return to;
        }

        public FiltroNegocioRequest ToFiltroNegocio(Sinacor.UI.Bovespa.Alocacao.Model.Parameter.FiltroNegocio from)
        {
            FiltroNegocioRequest to = new FiltroNegocioRequest();
            to.Bolsa = from.Bolsa;
            to.Cliente = from.Cliente;
            to.CodigoNegocio = from.CodigoNegocio;
            to.DataPregao = from.DataPregao;
            to.NaturezaOperacao = ToNaturezaOperacao(from.NaturezaOperacao);
            to.NumeroNegocio = from.NumeroNegocio;
            to.Mercado = ToMercado(from.Mercado);


            return to;
        }

        private TipoMercado? ToMercado(EnumWrapper<Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado> from)
        {
            TipoMercado? to = null;

            if (from != null)
            {
                switch (from.Value)
                {
                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.BOX:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.BOX;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.CotasETF:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.CotasETF;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Estruturado:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Estruturado;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.ExercicioOpcaoCompra:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.ExercicioOpcaoCompra;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.ExercicioOpcaoVenda:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.ExercicioOpcaoVenda;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Fracionario:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Fracionario;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Futuro:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Futuro;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.IntegralizacaoResgateCotas:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.IntegralizacaoResgateCotas;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Leilao:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Leilao;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.LeilaoNaoCotados:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.LeilaoNaoCotados;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.OpcaoCompra:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.OpcaoCompra;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.OpcaoVenda:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.OpcaoVenda;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.OpcaoVendaCompra:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.OpcaoVendaCompra;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Termo:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Termo;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.VencimentoFuturo:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.VencimentoFuturo;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Vista:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Vista;
                        break;

                    default:
                        break;
                }
            }

            return to;
        }

        private NaturezaOperacao? ToNaturezaOperacao(EnumWrapper<Sinacor.UI.Bovespa.Alocacao.Model.Enum.NaturezaOperacao> from)
        {
            NaturezaOperacao? to = null;
            if (from != null)
            {
                switch (from.Value)
                {
                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.NaturezaOperacao.Compra:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.NaturezaOperacao.Compra;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.NaturezaOperacao.CompraVenda:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.NaturezaOperacao.CompraVenda;
                        break;

                    case Sinacor.UI.Bovespa.Alocacao.Model.Enum.NaturezaOperacao.Venda:
                        to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.NaturezaOperacao.Venda;
                        break;

                    default:
                        break;
                }
            }
            return to;
        }
    }
}
